package org.laizili.solution.thread;

import java.util.concurrent.locks.LockSupport;

/**
 * <a href="https://www.nowcoder.com/test/28151186/summary">2021届阅文Java方向笔试卷 第14题</a>
 * <p>
 * 问题描述:
 * <p>
 * 建立三个线程A、B、C，A线程打印10次字母A，B线程打印10次字母B，C线程打印10次字母C，但是要求三个线程同时运行，并且实现交替打印，即按照ABCABCABC的顺序打印。
 */
public class PrintABC {
    private static Thread A, B, C; //定义A、B、C线程的引用

    public static void main(String[] args) {
        A = new Thread(() -> {
            for (int i = 0; i < 10; i++) {
                LockSupport.park();
                System.out.println("A");
                LockSupport.unpark(B);
            }
        });
        B = new Thread(() -> {
            for (int i = 0; i < 10; i++) {
                LockSupport.park();
                System.out.println("B");
                LockSupport.unpark(C);
            }
        });
        C = new Thread(() -> {
            for (int i = 0; i < 10; i++) {
                LockSupport.park();
                System.out.println("C");
                LockSupport.unpark(A);
            }
        });
        A.start();
        B.start();
        C.start();
        // unpark A 之前，所有线程均已启动
        LockSupport.unpark(A);
    }
}